import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

// 静默路由报错
const originalPush = VueRouter.prototype.push

VueRouter.prototype.push = function(location, onComplete, onAbort) {
  if (onComplete || onAbort) {
    return originalPush.call(this, location, onComplete, onAbort)
  }
  return originalPush.call(this, location).catch(() => {})
}
Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes,
})

// 处理全局前置收尾
// 可以在该守卫钩子函数中，判断用户是否登录，
// 以处理页面用户访问权限
router.beforeEach((to, from, next) => {
  // 进行判断

  if (to.meta?.permission) { // 判断是否需要验证用户登录
    if (store.state.user.token) {
      // 如果用户 token 数据存在，则说明已登录
      next()
    } else { // 如果不存在 token 数据， 则说明未登录，跳转到登录页面
      next({
        name: 'login',
        params: {
          to,
        },
      })
    }
  } else {
    // 所以用户可以访问的页面，不需要登录验证
    next()
  }
})
export default router
